﻿using System;
using System.Collections.Generic;
using System.Web;
using Zadani09.db;
using Zadani09.db.DAO;
using Zadani09.db.ODS;
using Zadani09.util;

namespace Zadani09
{
    public partial class Vystavy : System.Web.UI.Page
    {

        //private bool flag = false;
        private DateTime casRezervaceVstupenky = DateTime.Now;

        protected void Page_Init(object sender, EventArgs e)
        {
            GridView1.SelectedIndexChanged += new EventHandler(GridView1_SelectedIndexChanged);
            RezervaceButton.Click += new EventHandler(RezervaceButton_Click);
        }

        void RezervaceButton_Click(object sender, EventArgs e)
        {
            if (!IsValid) return;

            //neresene to, ze tam nekdo hodi pismenka..
            uint pocetDeti = uint.Parse(PocetProDetiTextBox.Text);
            uint pocetDospeli = uint.Parse(PocetProDospeleTextBox.Text);

            Vstupenka vstupenka = new Vstupenka();
            vstupenka.Datum = this.casRezervaceVstupenky;
            vstupenka.PocetDeti = pocetDeti;
            vstupenka.PocetDospeli = pocetDospeli;

            string idUzivatele = string.Empty;


            if (jePrihlasenAdmin())
            {
                idUzivatele = ((UzivatelSerializable)ziskejZeSession(Constants.PRIHLASENY_ADMIN)).IDUzivatel.ToString();
            }

            if (jePrihlasenUzivatel())
            {
                idUzivatele = ((UzivatelSerializable)ziskejZeSession(Constants.PRIHLASENY_UZIVATEL)).IDUzivatel.ToString();
            }


            //kvuli tomu, ze se tlacitko vyhodnocuje driv nez databind..(v request flow)
            FormView1.DataBind();
            string idVystavy = ((Vystava)FormView1.DataItem).IDVystava.ToString();

            vstupenka.IDUzivatel = uint.Parse(idUzivatele);
            vstupenka.IDVystava = uint.Parse(idVystavy);

            DAOTovarna.instance.getVstupenkaDAO().rezervuj(vstupenka);
            Label1.Text = "Vstupenky uspešně rezervovány";

            PocetProDetiTextBox.Text = string.Empty;
            PocetProDospeleTextBox.Text = string.Empty;
            
        }


       void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            TextBox1.Text = ViewState["vyhl_vystavy"] == null ? "" : (string)ViewState["vyhl_vystavy"];

            //label - "Detailni informace o vystave"
            Label2.Visible = true;

            //  flag = true;

            //neni nutne overovat rendering rezervace v onPreRender()
            //protoze tato metoda je volana pri zmene indexu, pak prechazi stranka do noveho
            //requestu a je automaticky volan preRender

        }

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        protected override void OnPreRender(EventArgs e)
        {
            //bohuzel, je pak overeni, zobrazeni a objednavacich tlacitek
            //spousteno dvakrat, jednou zde a po druhe ve chvili, kdy je uzivatelem vybrana
            //nejaka polozka (je zavolan PreRender a pak se binduje znovu automaticky datasourcy)
            GridView1.DataBind();
            FormView1.DataBind();
           
            base.OnPreRender(e);
        }

        private bool jePrihlasen()
        {
            if (ziskejZeSession(Constants.PRIHLASENY_UZIVATEL) != null || ziskejZeSession(Constants.PRIHLASENY_ADMIN) != null)
            {
                return (true);
            }
            else
            {
                return (false);
            }
        }

        private bool jePrihlasenAdmin()
        {
            return (ziskejZeSession(Constants.PRIHLASENY_ADMIN) != null) ? true : false;
        }

        private bool jePrihlasenUzivatel()
        {
            return (ziskejZeSession(Constants.PRIHLASENY_UZIVATEL) != null) ? true : false;
        }

        private object ziskejZeSession(string key)
        {
            return (this.Context.Session[key]);
        }

        protected override void OnPreRenderComplete(EventArgs e)
        {
            /////////////////////////////
            GridView1.DataBind();//nejspis nutne aby to chodilo na serveru
            //me to na localu chodi i bez toho..
            if (GridView1.SelectedIndex < 0)
            {
                //schovame moznost rezervace
                schovejRezervaci();
            }

            if (GridView1.Rows.Count <= 0)
            {
                Label1.Text = "<br/> Nebyly nalezeny žádné výstavy.";
                //a tudiz schovame vyhledavani
                schovejHledani();
            }
            else
            {
                Label1.Text = string.Empty;
                renderHledani();
            }

            Label2.Visible = GridView1.SelectedValue != null;


            //tedy je vybrana nejaka polozka z gridview1

            if (GridView1.SelectedValue != null)
            {

                //pokud je prihlasen, ma moznost u vystav se spravnym datumem (>=) objednavat vstupenky
                if (jePrihlasen())
                {
                    //vezmeme vybranou vystavu
                    //Vystava vybranaVystava = (Vystava)GridView1.SelectedRow.DataItem;
                    Vystava vybranaVystava = (Vystava)FormView1.DataItem;

                    //vezmeme datum dnesni a datum vystavy
                    DateTime dnesniDatum = this.casRezervaceVstupenky = DateTime.Now;
                    DateTime datumVybraneVystavy = vybranaVystava.Zacatek;

                    if ((datumVybraneVystavy.Year >= dnesniDatum.Year) && (datumVybraneVystavy.Month >= dnesniDatum.Month) && (datumVybraneVystavy.Day >= dnesniDatum.Day))
                    {
                        //pokud je dnesni datum >= datu ZACATKU vystavy, pak zobraz moznost objednavky vstup.
                        renderRezervace();
                    }
                    else
                    {
                        schovejRezervaci();
                    }

                }
                else
                {
                    //pokud neni prihlasen, nema tuto moznost
                    schovejRezervaci();
                }
            }          
            //////////////////////////////
            
            Session["vyhl_podle_vystavy"] = IsPostBack ? DropDownList1.SelectedValue : DropDownList1.Items[0].Value;

            base.OnPreRenderComplete(e);
        }

        [System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]
        public static string[] GetCompletionList(string prefixText, int count, string contextKey)
        {
            VystavaDataObject vystavy = new VystavaDataObject();
            List<Vystava> vysl;
            List<string> vrat = new List<string>();

            vysl = vystavy.cti_s_vyhledavanim(null, prefixText,
                        (string)HttpContext.Current.Session["vyhl_podle_vystavy"]);

            foreach (Vystava jeden in vysl)
                vrat.Add(jeden[HttpContext.Current.Session["vyhl_podle_vystavy"].ToString()].ToString());

            return (vrat.ToArray());
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            GridView1.DataBind();
            FormView1.DataBind();
            ViewState["vyhl_vystavy"] = TextBox1.Text;
        }

        private void schovejRezervaci()
        {
            RezervaceLabel.Visible = false;
            PanelRezervace.Visible = false;
        }

        private void renderRezervace()
        {
            RezervaceLabel.Visible = true;
            PanelRezervace.Visible = true;
        }

        private void renderHledani()
        {
            if (UpdatePanel1 != null) UpdatePanel1.Visible = true;
            TextBox1.Visible = true;
            DropDownList1.Visible = true;
            Button2.Visible = true;
        }

        private void schovejHledani()
        {
            if (UpdatePanel1 != null) UpdatePanel1.Visible = false;
            TextBox1.Visible = false;
            DropDownList1.Visible = false;
            Button2.Visible = false;
        }
    }

}
